    # 线程与进程
    # 进程：操作系统分配资源的最小单位，一个进程可以包含多个线程，进程之间相互独立
    # 线程：CPU调度的最小单位，一个进程中的多个线程共享进程的资源
    # 线程是随机调度的，
    # 线程之间切换的代价比进程大，所以线程适合处理一些短时间的任务，比如网络通信，数据库操作，文件操作等
    # 进程之间切换的代价大，所以进程适合处理一些比较长的任务，比如图形界面，音频播放等
    # 进程之间切换的代价大，所以进程适合处理一些比较长的任务，比如图形界面，音频播放等
    # 线程之间切换的代价小，所以线程适合处理一些短时间的任务，比如网络通信，数据库操作，文件操作等  

# 线程创建
import threading
import time

# 定义一个名为task1的函数
def task1():
    # 打印"task1 start"
    print("task1 start")
    #  循环100次
    for i in range(100):
        # 输出i
        print(f"task1的{i}")
    # 打印"task1 end"
    print("task1 end")

def task2():
    print("task2 start")
    for i in range(100):
        # 输出i
        print(f"task2的{i}")
    print("task2 end")

t1 = threading.Thread(target=task1)
t2 = threading.Thread(target=task2)
# 启动线程
t1.start()
t2.start()
# # 等待线程结束
# t1.join()
# t2.join()